This page was automatically generated by NetLogo 5.0.5.
The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Oracle's Java site.
In order for this to work, this file, your model file (SymbiosisModelFOR APPLET.nlogo), and the files NetLogoLite.jar and NetLogoLite.jar.pack.gz must all be in the same directory. (You can copy NetLogoLite.jar and NetLogoLite.jar.pack.gz from the directory where you installed NetLogo.)
The applet will also need access to the gis and nw extensions. Copy the entire directory for each required extension into the same directory as the applet.
On some systems, you can test the applet locally on your computer before uploading it to a web server. It doesn't work on all systems, though, so if it doesn't work from your hard drive, please try uploading it to a web server.
You don't need to include everything in this file in your page. If you want, you can just take the HTML code beginning with <applet> and ending with </applet>, and paste it into any HTML file you want. It's even OK to put multiple <applet> tags on a single page.
If the NetLogoLite files and your model are in different directories, you must modify the archive= and value= lines in the HTML code to point to their actual locations. (For example, if you have multiple applets in different directories on the same web server, you may want to put a single copy of the NetLogoLite files in one central place and change the archive= lines of all the HTML files to point to that one central copy. This will save disk space for you and download time for your users.)
powered by NetLogo
view/download model file: SymbiosisModelFOR APPLET.nlogo
This model is applied to a case study exploring at the development of regional Industrial symbiosis around the agricultural-based product industry in the Champagne-Ardenne region (France) where a circular supply chain initiative, limited to the flow circulation of cereals and beats waste and by-products, is already in place (see Figure 19). Champagne-Ardenne is a European crossroad lying on the main roads from Paris to Germany and from the UK or Belgium to the south of France, where over 60 percent of its land is dedicated to agriculture (crops, livestock farming and vineyards). Here, we envision that this local circular supply chain initiative can be extended to become an IS endeavor that goes beyond the agriculture industry by involving other local industries with symbiotic potential. Therefore, closing, as much as possible, the material cycles and implementing energy cascading by optimizing local resource use and exchange implies new type interactions between actors, each with its own motivations, which may have conflicting interests. Thus, AB modeling will be used to model their decision-making process and study these interactions that will reveal the system emergent pattern
The model encompasses the following entities:
1. Agents: They are the plants, represented by plant managers. In this model, 47 plants had been selected, 11 of them being already involved in a local symbiosis endeavor, the main activities are: sugar refinery, cereals and oil-seed grains agricultural cooperative, pulp and paper mills, plastics factories, cement plants, and biochemical transformation plants (Figure 1 and Figure 2)
2. Patches: They are the cells where the plants are located, each plant releases CO2 on the patch underneath it.
3. Links between agents that represent the exchange of materials: if materials (inputs and outputs) are available. Links will be created between the plants. This model uses actual quantitative input data to represent the symbiosis development, Table 2 summarizes the input and output flows for each participating plant.
4. GIS layers: Currently used as the geographic display of the roads, and the location of the plant. The plants use truck to exchange material with each other, in this model CO2 emissions from transportation is calculated using the distance between travelled during the delivery stage.
At every time step, each agent performs the following tasks in a chronological order:
If a pioneer plant:
1. Find a partner for exchange of material; each plant looks for an input, or more, up to the maximum of link set up by the user, among the output of the other plants. If there is availability of material that correspond to its input a link between the two entities is created, the behavior of the now partnered plant is set to 1.
If a follower plant:
• If there are more than 10 partnerships within the network: the follower plant imitates the pioneer’s behavior, which is performing steps 1, 2 and
Both breeds (pioneers and followers):
3. Remember past partnership (use link-memory): If there is availability of input, then the plants use trust transitivity algorithm; if the potential partner has a partner in common then the plant will perform a “preferential” partnership.
4. Learn and imitate the most frequent behavior within a set radius deter- mined by the user.
5. Emit CO2 during delivery
6. Calculate CO2 avoided: compare to traditional business to business delivery
(suggested things for the user to notice while running the model)
(suggested things for the user to try to do (move sliders, switches, etc.) with the model)
(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)
(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)
(models in the NetLogo Models Library and elsewhere which are of related interest)
;;;Copyright 2013 by Najet BICHRAOUI. All rights reserved.
;;;No part of this model may be reproduced or transmitted in any form or
;;;by any means, electronic, photocopying, recording, or otherwise, without
;;;prior written permission of the author.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;;Agent-Based Modelling Scenarios for the Development of Regional Industrial Symbiosis ;;; ;;;Demonstrate the potential of an Industrial symbiosis initiative around ;;;the sugar/wheat agricultural production in the Champagne Region (France). ;;; ;;;Copyright 2013 by Najet BICHRAOUI. All rights reserved. ;;;No part of this model may be reproduced or transmitted in any form or ;;;by any means, electronic, photocopying, recording, or otherwise, without ;;;prior written permission of the author. ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; extensions [ gis nw ] ;extensions [nw] globals [nodes-gis InL OutL one-partner exchange partnered non-partnered factories flows_qty nn partner-pioneer land_use symbiosis_plants_data parcels_data parcels_datatopo roads_data WTplants_data perimeter-dataset polyline linkwith-n2 nodes_list paths_list exchanges-pioneer exchanges-follower partner co2_pertonne_mile mydistance_km Comingto ComningFrom ] breed [plants plant] breed [nodes node] breed [trucks truck] undirected-link-breed [paths path] undirected-link-breed [roads road] paths-own [fid center dist iti] directed-link-breed [partnerships partnership] partnerships-own [ ownerFrom ownerTo ownerFromTurt ownerToTurt In out resource_type resource_capacity new-partner? route-list route-node-list mydistance dist ] trucks-own [ move-list move-list2 move-index done? total_length to-node cur-link speed behaviour orginWho origin destinName destination drive routes OriLocation itinerary distances ] nodes-own [id end? start? behaviour] plants-own [ Object_id name plocation Industry_type trust doubt behaviour cooperation involvment my_potential_partners my_current_partner my_partner my_partnerName myresource_capacity plant_type Type_Capacity mat_received mat_qty_received mat_received_from mat_received_fromName mat_sent mat_qty_sent mat_sent_to mat_sent_toName Incount outcount Input_list Output_list Input_capacity_list Output_capacity_list Normalized_Input_list_capacity Normalized_Output_list_capacity out_partners_memory in_partners_memory Totalflows Input_with_qty Ouput_with_qty GHG_partnered GHG_nonpartnered behaviour0_tax behaviour1_tax MMT_Co2 mydist_from mydist_to] patches-own [Total_GHGemissions GHGemissions GHG_pioneer GHG_follower ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ---------- startup/setup/go ---------- to startup read-gis-datasets end to read-gis-datasets set symbiosis_plants_data gis:load-dataset "data/List_plants_symb_topoVF_V1.shp" set perimeter-dataset gis:load-dataset "data/departments_limites_TOPOVF.shp" end to setup-world-envelope let world (gis:envelope-of perimeter-dataset) ;; [ minimum-x maximum-x minimum-y maximum-y ] if zoom != 1 [ let x0 (item 0 world + item 1 world) / 2 let y0 (item 2 world + item 3 world) / 2 let W0 zoom * (item 0 world - item 1 world) / 2 let H0 zoom * (item 2 world - item 3 world) / 2 set world (list (x0 - W0) (x0 + W0) (y0 - H0) (y0 + H0)) ] gis:set-world-envelope (world) end to setup clear-all-but-globals import-world "data/WorldMarch20th world.csv" read-gis-datasets setup-world-envelope set-default-shape plants "circle" set-default-shape trucks "truck" set co2_pertonne_mile 0.00010951 ;= (0.0094 gal diesel/tonne mile) * (25,630 lbs TFC CO2 emissions/ 1000 gal) * (1 tonne / 2200 lbs) import-plants reset-ticks end to import-plants ask patches [ set GHGemissions [] ] ask plants [die] foreach gis:feature-list-of symbiosis_plants_data [ let location gis:location-of (first (first (gis:vertex-lists-of ?))) if not empty? location [ create-plants 1 [ set xcor item 0 location set ycor item 1 location set size 0.5 set name gis:property-value ? "Name" set Object_id gis:property-value ? "OBJECTID" set trust random 5 set doubt random-float precision (0.9 + 0.5) 4 set involvment precision (trust * doubt) 4 set plocation min-one-of nodes [distance myself] set Type_Capacity gis:property-value ? "Type_C" set Input_list [] set Output_list [] set Input_capacity_list [] set Output_capacity_list [] set myresource_capacity [] set mat_received [] set mat_sent [] set flows_qty [] set Input_list lput gis:property-value ? "Input1" input_list set Input_list lput gis:property-value ? "Input2" input_list set Input_list lput gis:property-value ? "Input3" input_list set Input_list lput gis:property-value ? "Input4" input_list set Input_list lput gis:property-value ? "Input5" input_list set Input_list lput gis:property-value ? "Input6" input_list set Input_list lput gis:property-value ? "Input7" input_list set Input_list lput gis:property-value ? "Input8" input_list set Input_list remove "" Input_list set Input_capacity_list lput gis:property-value ? "Input1_c" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input2_c" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input3_c" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input4_c" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input5_c" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input6_c2" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input7_c2" Input_capacity_list set Input_capacity_list lput gis:property-value ? "Input8_c2" Input_capacity_list set Input_capacity_list remove nobody Input_capacity_list set Input_capacity_list remove 0 Input_capacity_list Set Normalized_Input_list_capacity map [ ? / 50 ] Input_capacity_list set Output_list lput gis:property-value ? "Output1" Output_list set Output_list lput gis:property-value ? "Output2" Output_list set Output_list lput gis:property-value ? "Output3" Output_list set Output_list lput gis:property-value ? "Output4" Output_list set Output_list lput gis:property-value ? "Output5" Output_list set Output_list remove "" Output_list set Output_capacity_list lput gis:property-value ? "Output1_c" Output_capacity_list set Output_capacity_list lput gis:property-value ? "Output2_c" Output_capacity_list set Output_capacity_list lput gis:property-value ? "Output3_c" Output_capacity_list set Output_capacity_list lput gis:property-value ? "Output4_c" Output_capacity_list set Output_capacity_list lput gis:property-value ? "Output5_c" Output_capacity_list set Output_capacity_list remove nobody Output_capacity_list set Output_capacity_list remove 0 Output_capacity_list Set Normalized_Output_list_capacity map [ ? / 50 ] Output_capacity_list ;;; amount produced for the week set Incount length Input_list set Outcount length Output_list set Industry_type gis:property-value ? "TypeID" set Totalflows sentence (Input_list)(Output_list) set Input_with_qty (map [list ?1 ?2] Input_list Normalized_Input_list_capacity ) set Ouput_with_qty (map [list ?1 ?2] Output_list Normalized_Output_list_capacity) set MMT_Co2 gis:property-value ? "MMT_Co2" ask patch-here [ set GHGemissions lput gis:property-value ? "MMT_Co2" GHGemissions ] ] ] ] ;;; setup plants ;;; ask plants [ ifelse (involvment > involvement_threshold_index) [ set plant_type "pioneer" set behaviour 1 set GHG_partnered MMT_Co2 ] [ set plant_type "follower" set behaviour 0 set GHG_nonpartnered MMT_Co2 ] check-behaviour-now ifelse (random-float 1.0 < cultural_cooperation_prob) ;; Make plants with a frequency of cooperators determined by Cultural-coopration-prob slider contolled by the user. the higher % of cooperation the higher is likehood to get partnered [set cooperation TRUE] [set cooperation FALSE] ;; if a random plant out of 20 is inferior to the initial number of coop probality, set the cooperation true, if not, set coop false ] set factories plants ; export-data end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GO COMMANDS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to go EXCHANGE_MAT TRANSPORT if learn? [learn]; ask plants [ emit_GHG] ifelse carbon_tax? [carbon_tax] [] if check_influence_policy? [check_influence_carbon-policy] ;log-turtles-tick ; file-print-csv-row ;export-data ;write_BSpace_output2 tick if ticks >= 100 [stop] end ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; to EXCHANGE_MAT ask plants with [behaviour = 1] [ if check_need self > 0 [ find_new_partner ] ] find-path ; for new partnerships end ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ; find partner ; to-report check_need [plant_a] let x 0 foreach needed_resources_list plant_a [ set x (x + ?) ] report x end to-report needed_resources_list [plant_a] let d [] ask plant_a [ let a Input_list let b Normalized_Input_list_capacity ;; full list of resources (capacity) needed let c current-input self ;; full list of resources (capacity) got from somewhere let temp 0 while [temp < length a] [ set d lput 0 d set temp temp + 1 ] set temp 0 while [temp < length a] [ let f item temp b ;; one-of resource (capacity) need let g item temp c ;; one-of received resources (capacity) let h (f - g) set d replace-item temp d h ;; = index list value , replace the 0 with the number of capacity needed set temp temp + 1 ] ] report d ;; report a full list about how many capacity still need to be found, full list means the length should be same as the input list. end to-report needed_name_list [plant_a] let new_need_list [] ask plant_a [ let a Input_list ;; full list let b needed_resources_list self ;; full list let temp 0 while [temp < length a] ;; run a while loop with full list (length of full list) [ if (item temp b > 0) [ set new_need_list lput (item temp a) new_need_list ] set temp temp + 1 ] ] report new_need_list ;; report a short list that all things in the list are still needed to be exchange end to-report left_resource_list [plant_a] let d [] ask plant_a [ let a Output_list ;; full list of output let b Normalized_Output_list_capacity ;; full list of output capacity let c current-Output self ;; full list of resource that were scheduled to be sent out let temp 0 while [temp < length a] [ set d lput 0 d ;; create a full list with the number 0 set temp temp + 1 ] set temp 0 while [temp < length a] [ let f item temp b ;; could supply let g item temp c ;; supply value that have been sent away let h (f - g) set d replace-item temp d h ;; = index list value , replace the 0 with the number of resource left set temp temp + 1 ] ] report d ;; report a full list with the resources left, including 0 if all the resource already have been used end to-report left_name_list [plant_a] let new_left_list [] ask plant_a [ let a Output_list ;; a full list let b left_resource_list self ;; a full list let temp 0 while [temp < length a] ;; while loop with full list [ if (item temp b > 0) ;; check if the output still not finished yet [ set new_left_list lput (item temp a) new_left_list ] set temp temp + 1 ] ] report new_left_list ;; report a short list that all things in the list are left (still avaiable for exchange) end to-report current-input [plant_b] ; the resources that are already received (scheduled to be received) let c [] ask plant_b [ let a Input_list let b Input_capacity_list let temp 0 while [temp < length a] [ set c lput 0 c set temp temp + 1 ] foreach sort my-in-partnerships [ let d [resource_type] of ? let f [resource_capacity] of ? let g position d a ;; index let h item g c ;; current input capacity set h (h + f) set c replace-item g c h ;; g c h = index list value ] ] report c ;; report a full list with how many of each resource have been scheduled to be received. ; set myresource_capacity resource_capacity end to-report current-output [plant_b] ; the resources that are already sent out (scheduled to be sent out) let c [] ask plant_b [ let a Output_list let b Normalized_Output_list_capacity let temp 0 while [temp < length a] [ set c lput 0 c set temp temp + 1 ] foreach sort my-out-partnerships [ let d [resource_type] of ? let f [resource_capacity] of ? let g position d a ;; index let h item g c ;; current output capacity list set h (h + f) set c replace-item g c h ;; g c h = index list value ] ] report c ;; report a full list with how many of each resource have been scheduled to be sent. end to-report potential_partners [a_plant] ;; deal with trust transitive let potential_partner [] ask a_plant [ ifelse ((count my-in-partnerships + count my-out-partnerships) > 0) [ set my_current_partner (turtle-set in-partnership-neighbors out-partnership-neighbors) let in_neighbors ( [in-partnership-neighbors] of my_current_partner with [behaviour = 1]) let out_neighbors ( [out-partnership-neighbors] of my_current_partner with [behaviour = 1]) ;set mat_received_from in_neighbors ; set mat_received_fromName [name] of in_neighbors ; set mat_sent_to out_neighbors ; set mat_sent_toName [name] of out_neighbors set out_partners_memory [name] of out-partnership-neighbors set in_partners_memory [name] of in-partnership-neighbors let pp_check_list1 (turtle-set my_current_partner in_neighbors out_neighbors) let pp_check_list [] foreach sort pp_check_list1 [ set pp_check_list lput ? pp_check_list ] set pp_check_list remove-duplicates pp_check_list ;; potential_partner set pp_check_list remove self pp_check_list ;; potential_partner ifelse (not empty? pp_check_list) [ set potential_partner (list_out_potential_partner pp_check_list self) if not empty? potential_partner [show "trust transitive: partner"] if empty? potential_partner [ let all_other_list (list other plants with [behaviour = 1]) set potential_partner (list_out_potential_partner all_other_list self) show "trust transitive: i have frd and frd of frd, they don't have what I needed" ] ] [ let all_other_list (list other plants with [behaviour = 1]) set potential_partner (list_out_potential_partner all_other_list self) show "trust transitive: i have no frd yet" ] ] [ let all_other_list (list other plants with [behaviour = 1]) set potential_partner (list_out_potential_partner all_other_list self) show "trust transitive: i have no frd yet" ] ] report potential_partner set my_potential_partners [name] of potential_partner end to-report list_out_potential_partner [a_list plant_need] let a_list2 turtle-set a_list let pp_list [] let wanted_list needed_name_list plant_need foreach sort a_list2 [ let i_have_list left_name_list ? let x_list filter [member? ? wanted_list] i_have_list if not empty? x_list [ set pp_list lput ? pp_list ] ] report pp_list ;; end to-report resource_flow [plant_origin plant_destination] let thing "" let flow 0 let thing_left left_name_list plant_origin let thing_need needed_name_list plant_destination let capacity_left remove 0 (left_resource_list plant_origin) let capacity_need remove 0 (needed_resources_list plant_destination) let thing_in_both_list [] let temp 0 while [temp < length thing_need] [ let a (item temp thing_need) if member? a thing_left [ let b item temp capacity_need let p position a thing_left let c item p capacity_left let f min (list b c) let d (list a f) ;;; thing (type), flow set thing_in_both_list lput d thing_in_both_list ] set temp temp + 1 ] let flow_list [] foreach thing_in_both_list [ let x item 1 ? set flow_list lput x flow_list ] let max_flow_possible max flow_list let target_thing position max_flow_possible flow_list let z item target_thing thing_in_both_list show z report z ;;; thing (type), flow end to find_new_partner if (cooperation) [ let pp potential_partners self ;; a list let p2 turtle-set pp ;; transform a list into an agentset ifelse (count p2 > 0) [ set one-partner one-of p2 let rf resource_flow one-partner self ;; origin --> destination create-partnership-from one-partner [ if hide-part? [set hidden? true] set new-partner? true set resource_type item 0 rf set resource_capacity item 1 rf set ownerFrom [name] of end1 set ownerTo [name] of end2 set ownerFromTurt end1 set ownerToTurt end2 set Comingto end2 set ComningFrom end1 ] set my_partner one-partner set my_partnerName [name] of one-partner set mat_received item 0 rf set mat_qty_received item 1 rf set mat_received_from my_partner set mat_received_fromName [name] of my_partner set flows_qty lput partnerships flows_qty ask my_partner [ set mat_sent item 0 rf set mat_qty_sent item 1 rf set mat_sent_to Comingto set mat_sent_toName [name] of Comingto ] ] [ find_no_partner ] ] end to find_no_partner ask plants with [behaviour = 1] [ if (count my-in-partnerships + count my-out-partnerships) = 0 [ set behaviour 0 set color brown ] ] end ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ; find path ; to find-path nw:set-snapshot nodes paths ask partnerships with [new-partner? = true] [ let a [] let b [] let junction1 [plocation] of end1 let junction2 [plocation] of end2 let d junction2 ask junction1 [ set a nw:path-to d set b nw:turtles-on-path-to d ] set route-list a set route-node-list b ] ask partnerships with [new-partner? = true] [ foreach route-list [ask ? [set color yellow set dist link-length ] set mydistance sum [dist] of paths show mydistance set mydistance_km mydistance * 3 ] ] hatch-truck end ;;; Path length computations ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to hatch-truck ask partnerships with [new-partner? = true] [ let m-list route-node-list ask end1 [ hatch-trucks 1 [ set size (truck-meters * 4000) / meters-per-patch set color green set move-list m-list set done? false set move-index 0 if hide-truck? [set hidden? true] ] ] set new-partner? false ] end to TRANSPORT moving if go-back? = true [ goback_command ] end to moving while [any? trucks with [done? = false]] [ ask trucks with [done? = false] [ ifelse (move-index) >= (length move-list) [ set done? true ] [ move-truck ] ] ] if all? trucks [done? = true] [ ask trucks [ set move-index 0 set done? false ] show (word "plant 1 count: " count plants with [behaviour = 1]) show (word "trucks count: "count trucks) show (word "partnerships count: "count partnerships) ] end to goback_command ask trucks [ set move-list reverse move-list ] moving ask trucks [ set move-list reverse move-list ] end to move-truck let x (item move-index move-list) face x fd (distance x) set move-index (move-index + 1) end ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ; behaviour change ; to learn ;;;;;imitate most frequent behavior with turtles in radius 5 if learn? [ ask plants with [behaviour = 0] [ let a count other plants in-radius influence_radius with [behaviour = 1] let b count other plants in-radius influence_radius with [behaviour = 0] if (a + b) > 0 [ if (random-float ( a / (a + b) )) > (random-float b / (a + b)) ;; count a > count b [ set behaviour 1 ] ] ] ] check-behaviour-now end to check-behaviour-now ask plants [ if behaviour = 1 [set color blue] if behaviour = 0 [set color brown] ] end ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ; GHG calculation ; to emit_GHG ask plants [ set GHG_partnered MMT_Co2 * 1.01 set GHG_nonpartnered MMT_Co2 * 1.8 ] end to carbon_tax ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;the contribution of C02 in GHG is considered to be 99%. water vapor is ignored. therefore GHG=Co2 ask plants [ set behaviour0_tax GHG_partnered + 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; amount of carbon tax non-partnered plants have to pay set behaviour1_tax GHG_nonpartnered + 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; amount of carbon tax partnered plants have to pay ifelse (behaviour = 0) [set behaviour0_tax (behaviour0_tax * carbon_tax_price)] [set behaviour1_tax (behaviour1_tax * carbon_tax_price)] ] end to check_influence_carbon-policy ;;;;;;;;;;;;;;;;;;;;;;;;;;plants managers can also change their behaviour from non-partnered to partnered through the incentive (influence) ask plants [ ;;;;;;;;;;;;;;;;;;;;;;;;; of the carbon tax. if the plant is non-partnerd and has a majority of neighboring plants that are partnered and ;;;;;;;;;;;;;;;;;;;;;;;;;; pay a certain percentage less (influence_threshold) tax, then imitate their behaviour and become partnered. if count plants with [behaviour1_tax = [behaviour1_tax * Influence_threshold] of myself] in-radius influence_radius > count factories with [behaviour = 0] [set behaviour 1] ] end ;;;;;;;;;;;REPORTERS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to clear-all-but-globals ct cp cd clear-links clear-all-plots clear-output end to-report meters-per-patch ;; maybe should be in gis: extension? let world gis:world-envelope ; [ minimum-x maximum-x minimum-y maximum-y ] let x-meters-per-patch (item 1 world - item 0 world) / (max-pxcor - min-pxcor) * 2.59 let y-meters-per-patch (item 3 world - item 2 world) / (max-pycor - min-pycor) * 2.59 report mean list x-meters-per-patch y-meters-per-patch end to-report new-node-at [x y] ; returns a node at x,y creating one if there isn't one there. let n nodes with [xcor = x and ycor = y] ifelse any? n [set n one-of n] [ create-nodes 1 [ setxy x y set size 0.01 set n self] ] report n end to-report total_Partnered report count plants with [behaviour = 1] end to-report total_NonPartnered report count plants with [behaviour = 0] end to-report total_qty_receiced report sum [mat_qty_received] of plants end to-report total_qty_sent report sum [mat_qty_sent] of plants end to-report total_qty report precision (total_qty_receiced + total_qty_sent) 0 end to-report Mean_trust report mean [trust] of plants end to-report Mean_doubt report mean [doubt] of plants end to-report Mean_Involvment report mean [involvment] of plants end to-report GHG_savings report sum [Total_GHG_nonpartnered - Total_GHG_partnered] of patches end to-report Tax_savings report sum [behaviour0_tax - behaviour1_tax] of patches end to-report Total_behaviour1_tax report sum [behaviour1_tax] of plants end to-report Total_behaviour0_tax report sum [behaviour0_tax] of plants end to-report Mean_behaviour1_tax report mean [behaviour1_tax] of plants end to-report Mean_behaviour0_tax report mean [behaviour0_tax] of plants end to-report co2_transport report precision (co2_pertonne_mile + (total_qty * co2_pertonne_mile * mydistance_km)) 0 end to-report Co2_transportOutside report precision (co2_pertonne_mile + (total_qty * co2_pertonne_mile * (mydistance_km * random 4))) 0 end to-report Co2_Trans_savings report precision (Co2_transportOutside - co2_transport) 0 end to-report Total_GHG_partnered report sum [GHG_partnered] of plants with [behaviour = 1] end to-report Total_GHG_nonpartnered report sum [GHG_nonpartnered] of plants with [behaviour = 0] end ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ;;;;==============================================================================================;;; ; Turtles log for individual analysis with output file ; ;;;####################################